﻿using System.Xml.Linq;

namespace Sidvall.CodeGenerator.Xml
{
	public static class XElementExtension
	{
		#region Public Members

		#region GetAttribute

		public static XAttribute GetAttribute(this XElement item, string attributeName)
		{
			if (item == null)
				return null;
			return item.Attribute(attributeName);
		}

		public static XAttribute GetAttribute(this XElement item, string attributeName, string elementName)
		{
			item = item.GetElement(elementName);
			if (item == null)
				return null;
			return item.Attribute(attributeName);
		}

		public static XAttribute GetAttribute(this XElement item, string attributeName, string[] elementNames)
		{
			item = item.GetElement(elementNames);
			if (item == null)
				return null;
			return item.Attribute(attributeName);
		}

		#endregion
		#region GetAttributeValue

		public static string GetAttributeValue(this XElement item, string attributeName)
		{
			XAttribute attribute;

			attribute = GetAttribute(item, attributeName);
			if (attribute == null)
				return null;
			return attribute.Value;
		}

		public static string GetAttributeValue(this XElement item, string attributeName, string elementName)
		{
			XAttribute attribute;

			attribute = GetAttribute(item, attributeName, elementName);
			if (attribute == null)
				return null;
			return attribute.Value;
		}

		public static string GetAttributeValue(this XElement item, string attributeName, string[] elementNames)
		{
			XAttribute attribute;

			attribute = GetAttribute(item, attributeName, elementNames);
			if (attribute == null)
				return null;
			return attribute.Value;
		}

		#endregion
		#region GetElementValue

		public static string GetElementValue(this XElement item)
		{
			if (item == null)
				return null;
			return item.Value;
		}

		public static string GetElementValue(this XElement item, string elementName)
		{
			item = item.GetElement(elementName);
			if (item == null)
				return null;
			return item.Value;
		}

		public static string GetElementValue(this XElement item, string[] elementNames)
		{
			item = item.GetElement(elementNames);
			if (item == null)
				return null;
			return item.Value;
		}

		#endregion
		#region GetFirstDescendantValue

		public static string GetFirstDescendantValue(this XElement item)
		{
			return GetFirstDescendantValue(item, null);
		}
		public static string GetFirstDescendantValue(this XElement item, string elementName)
		{
			item = item.GetFirstDescendant(elementName);
			if (item == null)
				return null;
			return item.Value;
		}

		#endregion

		#endregion
	}
}
